home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / boot / netBoot / sun3src / machdep.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-05-13  |  2.7 KB  |  144 lines

  1.  
  2. /*
  3.  * @(#)machdep.c 1.1 86/09/27
  4.  * Copyright (c) 1986 by Sun Microsystems, Inc.
  5.  */
  6.  
  7. #include "../h/systypes.h"
  8. #include "../sun3/machdep.h"
  9.  
  10. /*
  11.  *    these are the routines in machdep
  12.  *    addr is usually a u_long
  13.  *    entry is a ??_size
  14.  *    routines for mapping and registers return ??_size
  15.  *    most of the set* routines return what was there before
  16.  *    %'ed routines return nothing
  17.         cx_size        getcxreg()
  18.         cx_size        setcxreg(entry)
  19.         sm_size        getsmreg(addr)
  20.         sm_size        setsmreg(addr,entry)
  21.         pg_size        getpgreg(addr)
  22.         pg_size        setpgreg(addr,entry)
  23.         berr_size    getberrreg()
  24.         int  %      map(virt, size, phys, space)
  25.  *
  26.  */
  27. /*
  28.  * get/set fc3 are to eliminate the assembly all over the place,
  29.  * and to let users do their own self abuse
  30.  */
  31. u_long
  32. getfc3(size,addr)
  33. register u_long            size, *addr;
  34. {
  35.     MOVL(#3, d0);
  36.     MOVC(d0, sfc);
  37.     if (size == sizeof(u_char))
  38.         MOVSB(a5@, d7);
  39.     else if (size == sizeof(u_short))
  40.         MOVSW(a5@, d7);
  41.     else if (size == sizeof(u_long))
  42.         MOVSL(a5@, d7);
  43.     return(size);
  44. }
  45.  
  46. u_long
  47. setfc3(size,addr,entry)
  48. register u_long            size, *addr,entry;
  49. {
  50.     MOVL(#3, d0);
  51.     MOVC(d0, dfc);
  52.     if (size == sizeof(u_char))
  53.         MOVSB(d6, a5@);
  54.     else if (size == sizeof(u_short))
  55.         MOVSW(d6, a5@);
  56.     else if (size == sizeof(u_long))
  57.         MOVSL(d6, a5@);
  58. }
  59. cx_size
  60. getcxreg()
  61. {
  62.     return((cx_size) getfc3(sizeof(cx_size), CX_OFF));
  63. }
  64. cx_size
  65. setcxreg(entry)
  66. register cx_size        entry;
  67. {
  68.     register cx_size    ret = getcxreg();
  69.  
  70.     setfc3(sizeof(cx_size), CX_OFF, entry);
  71.     return(ret);
  72. }
  73.  
  74. sm_size
  75. getsmreg(addr)
  76. register u_long            addr;
  77. {
  78.     addr = ((addr & ~SEGMASK) + SM_OFF) & ADDRMASK;
  79.     return((sm_size) getfc3(sizeof(sm_size), addr));
  80. }
  81.  
  82. sm_size
  83. setsmreg(addr,entry)
  84. register u_long            addr;
  85. register sm_size        entry;
  86. {
  87.     register sm_size    ret = getsmreg(addr);
  88.  
  89.     addr = ((addr & ~SEGMASK) + SM_OFF) & ADDRMASK;
  90.     setfc3(sizeof(sm_size), addr, entry);
  91.     return(ret);
  92. }
  93.  
  94. pg_size
  95. getpgreg(addr)
  96. register u_long            addr;
  97. {
  98.     addr = ((addr & ~PAGEMASK) + PG_OFF) & ADDRMASK;
  99.     return((pg_size) getfc3(sizeof(pg_size), addr));
  100. }
  101.  
  102. pg_size
  103. setpgreg(addr,entry)
  104. register u_long            addr;
  105. register pg_size        entry;
  106. {
  107.     register pg_size    ret = getpgreg(addr);
  108.  
  109.     addr = ((addr & ~PAGEMASK) + PG_OFF) & ADDRMASK;
  110.     setfc3(sizeof(pg_size), addr, entry);
  111.     return(ret);
  112. }
  113.  
  114. map(virt, size, phys, space)
  115. register u_long                virt, size, phys;
  116. register enum pm_type            space;
  117. {
  118.     pg_t                page;
  119.     register struct pg_field    *pgp = &page.pg_field;
  120.     register            i;
  121.  
  122.     pgp->pg_valid = 1;
  123.     pgp->pg_permission = PMP_ALL;
  124.     pgp->pg_space = space;
  125.  
  126.     phys = BTOP(phys);
  127.     size = BTOP(size);
  128.  
  129.     for (i = 0; i < size; i++){        /* for each page, */
  130.         pgp->pg_pagenum = phys++;
  131.         setpgreg(virt + PTOB(i), page.pg_whole);
  132.     }
  133. }
  134.  
  135.  
  136. berr_size
  137. getberrreg()
  138. {
  139.     return((berr_size) getfc3(sizeof(berr_size), BERR_OFF));
  140. }
  141.  
  142.  
  143.  
  144.